/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import enumeraciones.EnumEstadoUsuario;
import java.sql.*;
import java.util.ArrayList;
import controlador.*;
import controlador.*;
import Util.*;


/**
 *
 * @author JAVA
 */
public class PersistenciaUsuario extends PersistenciaConexion {

    /**
     * Carga un usuario
     * @param nickUsuario -> Identificador único del usuario
     * @return  -> devuelve un objeto de la clase usuario.
     */
    public static Usuario cargaUsuario(String nick) {
        Usuario usu;
        try {
            crearConexion();
            ResultSet rs = st.executeQuery("SELECT * FROM " + usuario + " WHERE nickUsuario = " + nick);
            if (rs.first()) {                
/*                
            Usuario(String nickUsuario, int idUsuario , String nombre,
                   String apellidos, String email,
                   String poblacion ,String provincia ,String descripcionPersonal,
                   String tipoPerfil ,EnumEstadoUsuario miestado ,String contrasenya,
                   Date fechaalta ,Date fechabaja ,Set invitaciones,
                   String lema, String sexo,Date fechaNacimiento)
  */                 
                   usu = new Usuario(
                                  rs.getString("nickUsuario"),                        
                                  rs.getInt("idUsuario"),
                                  rs.getString("nombre"),
                                  rs.getString("apellidos"),
                                  rs.getString("email"),
                                  rs.getString("poblacion"),
                                  rs.getString("provincia"),
                                  rs.getString("descripcionPersonal"),
                                  rs.getString("tipoPerfil"),
                                  rs.getString("tipo"),
                                  rs.getString("contrasenya"),
                                  rs.getDate("fechaalta"),
                                  rs.getDate("fechabaja"),
                                  CagarInvitaciones(rs.getInt("idUsuario")),
                                  rs.getString("lema"), 
                                  rs.getString("sexo"),
                                  rs.getDate("fechaNacimiento"));
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("ERROR");
        } finally {
            cerrarConexion();
            return usu;
        }
    }

    /**
     * Comprueba si existe un Usuario
     * @param idUsuario
     * @return -> devuelve un entero, idUsuario, de la clase Usuario
     */
    public static boolean  existeUsuario(String nick) {
        boolean existe = false;  
        try {
            crearConexion();
            ResultSet rs = st.executeQuery("SELECT * FROM " + usuario + " WHERE nickUsuario = '" + nick + "'");
            if (rs.first()) {
                existe = true;
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            cerrarConexion();
        }
        return existe;
    }
    
     /**
     * Indica si un usuario esta dado de baja
     * @param indice
     * @return 
     */
    public static boolean esBajaUsuario(String nick) {
        boolean res = false;
        try {
            crearConexion();
            ResultSet rs = st.executeQuery("SELECT estado FROM " + usuario + " WHERE nickUsuario = " + nick);
            if (rs.first()) {
                if (rs.getInt("estado") == 0) {
                    res = true;
                }
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            cerrarConexion();
        }
        return res;
    }


    /**
     * Da de alta a un nuevo Usuario que está de baja
     * @param nombreUsuario
     * @return -> devuelve un boolean, True o False
     */
    public static boolean darAltaUsuario(Usuario usu) throws SQLException {
        boolean res = false;
        try {
            crearConexion();
            int rowcount = st.executeUpdate("UPDATE " + usuario + " SET "
                    + "estado = 1 WHERE id = " + nombreUsu);
            if (rowcount == 1) {
                int rowcount = st.executeUpdate("UPDATE " + usuario + " SET "
                        + "estado = alta WHERE id = " + nombreUsu);
                if (rowcount == 1) {
                    res = true;
                }
            }  catch (Exception e) {
            System.out.println("ERROR");

            int rowcount = st.executeUpdate("UPDATE "+ usuario +" SET "
                    + "estado = alta WHERE id = "+nick);
            if(rowcount == 1) {
                res = true;
            }
        } catch (Exception e) {
             System.out.println("ERROR");
            
        } finally {
            cerrarConexion();
        }
        return res;
    }
    
}  

    public static ArrayList<Usuario> recuperarUnaListasDeAmigos(String nick) throws NullPointerException {
        ArrayList<Usuario> listaAmigos = new ArrayList<Usuario>();

        return listaAmigos;
    }
 
    
    /**
     * Da de alta un nuevo usuario en la base de datos
     * @param sujeto   -> Objeto usuario
     */
    public static void registrarUsuario(Usuario usuario) {
        String cadenaSql = "";
        try {
            if (usuario instanceof Usuario) {
                // Registro un cliente
                Usuario usu = (Usuario) usuario;
                cadenaSql = "INSERT INTO   usuario "
                        + " (nombre, apellidos, email, poblacion, provincia, descripcionPersonal,tipoPerfil,"
                        + " estado, contrasenya, fachaAlta, fechaBaja, invitaciones, lema, sexo, fechaNacimiento,"
                        + " nickUsuario)"
                        + " VALUES ('" + usu.getUsuario() + "','"
                        + usu.getNombre() + "','"
                        + usu.getApellidos() + "','"
                        + usu.getEmail() + "','"
                        + usu.getPoblacion() + "','"
                        + usu.getProvincia() + "','"
                        + usu.getDescripcion() + "','"
                        + usu.getPerfil() + "','"
                        + EnumEstadoUsuario.alta + "','"
                        + usu.getContrasenya() + "','"
                        + UtilFecha.fechaMySQL(usu.getFechaAlta()) + "','"
                        + UtilFecha.fechaMySQL(usu.getFechaBaja()) + "','"
                        + usu.getInvitaciones() + "','"
                        + usu.getLema() + "','"
                        + usu.getSexo() +"','"
                        + UtilFecha.fechaMySQL(usu.getFechaNacimiento()) + "','"
                        + usu.getDescripcion()+ "','"
                        + usu.getPerfil()+ "','"
                        + EnumEstadoUsuario.alta+ "','"
                        + usu.getContrasenya()+ "','"                   
                        + UtilFecha.fechaMySQL(usu.getFechaAlta())+ "','"       
                        + UtilFecha.fechaMySQL(usu.getFechaBaja()) + "','" 
                        + usu.getInvitaciones()+ "','"
                        + usu.getLema()+ "','"
                        + usu.getSexo() + "','"
                        + UtilFecha.fechaMySQL(usu.getFechaNacimiento())+ "');";
            }
            crearConexion();
            st.executeUpdate(cadenaSql);
        } catch (Exception e) {
            System.out.println("ERROR");
        } finally {
            cerrarConexion();
        }
    }

    /**
     * Edita la categoria a la que pertenece
     * @param categoria
     */
    public static void modificarUsuario(Usuario usu) {
         String cadenaSql = "";
        try {
                // Modificamos un usuario           
                Usuario usu = new Usuario();              
                cadenaSql = "UPDATE usuario "                   
                    + " SET nombre     = '" + usu.getNombre() 
                    + ", apellidos        = " + usu.getApellidos()
                    + ", email = " + usu.getEmail()
                    + ", poblacion   = " + usu.getPoblacion()
                    + ", provincia   = " + usu.getProvincia()
                    + ", descripcionPersonal = " + usu.getDescripcion()
                    + ", tipoPerfil = " + usu.getPerfil()
                    + ", estado = " + usu
                    + ", contrasenya = " + usu.getContrasenya()
                    + ", fechaAlta = " + usu.getFechaAlta()
                    + ", fechaBaja = " + usu.getFechaBaja()
                    + ", invitaciones = " + usu.getInvitaciones()
                    + ", lema = " + usu.getLema()
                    + ", sexo = " + usu.getSexo()
                    + ", fechaNacimiento = " + usu.getFechaNacimiento()
                    + " WHERE nickUsuario       = " + nick + ";";
                
          crearConexion();
            st.executeUpdate(cadenaSql);
        } catch (Exception e) {
            System.out.println("ERROR");
              System.out.println("ERROR");
        } finally {
            cerrarConexion();
        }    
    }

}